﻿using System;
using System.Collections.Generic;
using System.Web;

namespace ToaThuoc_PAK.Handler
{
    public class Ajax_LuuPhieuKham : IHttpHandler, System.Web.SessionState.IRequiresSessionState
    {

        //Nếu là bệnh nhân chuyển khoa thì không lưu phiếu khám
        //Còn lại tất cả đều tạo phiếu khám mới
        //Nếu là bệnh nhân mới thì lưu thêm thông tin của họ vào PhongKham..BenhNhan
        private string isThuocBaoHiem;
        private BenhNhan BenhNhan;
        private DAL_PhieuKham dal_PhieuKham;
        private So_PhieuKham SPK;
        public void ProcessRequest(HttpContext context)
        {
            string XuTri = Factory.emptyNull(context.Request.QueryString["XuTri"]);
            GetThongTinBenhNhan(context);
            dal_PhieuKham = new DAL_PhieuKham();
            SPK = GenerateSoPhieuKham(context);
            string xmlReturn = "<Root>";
            string message = "";
            string KieuLuu = context.Request.QueryString["KieuLuu"];
            bool result = false;
            switch (KieuLuu)
            {
                case "moi":
                    result = SPK.addPhieuKham();
                    if (result)
                    {
                        dal_PhieuKham.TangSoMaPhieu();
                        switch (XuTri)
                        {
                            case "ketoa":
                                message = LuuToaThuoc(context);
                                break;
                            default:
                                break;
                        }
                    }
                    break;
                case "capnhat":
                    result = SPK.updatePhieuKham();
                    break;
            }
            xmlReturn += "<KetQua Message=\"" + message + "\"></KetQua>";
            xmlReturn += "</Root>";
            context.Response.ContentType = "text/xml";
            context.Response.Write(xmlReturn);
        }

        private So_PhieuKham GenerateSoPhieuKham(HttpContext context)
        {
            So_PhieuKham tempSPK = new So_PhieuKham();
            string dmyngay = DateTime.Now.ToString();
            string _maph = dal_PhieuKham.TaoMaPhieu("PK");
            string _mabn = Factory.emptyNull(context.Request.QueryString["MaBN"]);
            int vt = _mabn.Length - 6;
            string laymabn = _mabn.Substring(vt, 6);
            tempSPK.MaPK = _maph + laymabn;
            tempSPK.MaKhoa = Factory.emptyNull(context.Request.QueryString["MaKhoa"]);
            try
            {
                tempSPK.Ngay = Convert.ToDateTime(dmyngay);
            }
            catch
            {
                tempSPK.Ngay = Convert.ToDateTime("1/1/1900");
            }
            tempSPK.MaThuDV = Factory.emptyNull(context.Request.QueryString["MaThuDV"]);
            tempSPK.MaBA = Factory.emptyNull(context.Request.QueryString["MaBA"]);
            tempSPK.MaBN = _mabn;
            tempSPK.NguonBN = NguonBenhNhan(tempSPK.MaBN);
            tempSPK.TrieuChung = Factory.emptyNull(context.Request.QueryString["TrieuChung"]);
            tempSPK.ChanDoanSoBo = Factory.emptyNull(context.Request.QueryString["ChanDoanSoBo"]);
            tempSPK.ChanDoan = Factory.emptyNull(context.Request.QueryString["ChanDoan"]);
            tempSPK.ICDChanDoan = Factory.emptyNull(context.Request.QueryString["ICDChanDoan"]);
            tempSPK.ChanDoanPhu1 = Factory.emptyNull(context.Request.QueryString["ChanDoanPhu1"]);
            tempSPK.ICDChanDoanPhu1 = Factory.emptyNull(context.Request.QueryString["ICDChanDoanPhu1"]);
            tempSPK.ChanDoanPhu2 = Factory.emptyNull(context.Request.QueryString["ChanDoanPhu2"]);
            tempSPK.ICDChanDoanPhu2 = Factory.emptyNull(context.Request.QueryString["ICDChanDoanPhu2"]);
            tempSPK.XuTri = Factory.emptyNull(context.Request.QueryString["XuTri"]);
            tempSPK.ChiDinhDieuTri = Factory.emptyNull(context.Request.QueryString["ChiDinhDieuTri"]);
            tempSPK.LoiDanBS = Factory.emptyNull(context.Request.QueryString["LoiDanBS"]);
            tempSPK.HenTaiKham = Factory.emptyNull(context.Request.QueryString["HenTaiKham"]);
            try
            {
                tempSPK.NgayTaiKham = Convert.ToDateTime(context.Request.QueryString["NgayTaiKham"]);
            }
            catch
            {
                tempSPK.NgayTaiKham = Convert.ToDateTime("1/1/1900");
            }
            tempSPK.MaBS = Factory.emptyNull(context.Request.QueryString["MaBS"]);
            tempSPK.BacSiKham = Factory.emptyNull(context.Request.QueryString["TenBS"]);
            tempSPK.ChuyenDenKhoa = Factory.emptyNull(context.Request.QueryString["ChuyenDenKhoa"]);
            tempSPK.ChuyenDenBV = Factory.emptyNull(context.Request.QueryString["ChuyenDenBV"]);
            tempSPK.DaKeToa = true;
            tempSPK.DBName = "";
            tempSPK.KetThucKham = "";
            tempSPK.MaDotKham = Factory.emptyNull(context.Request.QueryString["MaDotKham"]);
            string LoaiKham = "khamchinh";
            if (Factory.emptyNull(context.Request.QueryString["LoaiKham"]) != "")
                LoaiKham = context.Request.QueryString["LoaiKham"];
            tempSPK.LoaiKham_CP = LoaiKham;
            tempSPK.MaPhieuKhamChinh = Factory.emptyNull(context.Request.QueryString["MaPhieuKhamChinh"]); ;
            tempSPK.MaPhieuCu = Factory.emptyNull(context.Request.QueryString["MaPhieuCu"]); ;
            return tempSPK;
        }

        private void GetThongTinBenhNhan(HttpContext context)
        {
            BenhNhan = new BenhNhan();
            BenhNhan.MaBN = Factory.emptyNull(context.Request["MaBN"]);
            BenhNhan.DoiTuong = Factory.emptyNull(context.Request["DoiTuong"]);
        }

        private string NguonBenhNhan(string MaBN)
        {
            if (MaBN.IndexOf("BNPK") >= 0)
            {
                return "0";
            }
            else
            {
                return "1";
            }
        }

        private string LuuToaThuoc(HttpContext context)
        {
            try
            {
                string xmlReturn = "", message = "";
                isThuocBaoHiem = Factory.emptyNull(context.Request.QueryString["IsThuocBH"]);
                if (isThuocBaoHiem == "on")
                    isThuocBaoHiem = "true";
                else
                    isThuocBaoHiem = "false";
                int DoiTuongBN = 0;
                switch (BenhNhan.DoiTuong)
                {
                    case "DV":
                        DoiTuongBN = 2;
                        break;
                    case "BHYT":
                        DoiTuongBN = 1;
                        break;
                }
                CToathuoc oToaThuoc = new CToathuoc(SPK.MaPK, DoiTuongBN, Convert.ToBoolean(isThuocBaoHiem));
                //Lấy thông tin thuốc từ bảng tableToaThuoc
                string IDThuoc_Arr = Factory.emptyNull(context.Request.QueryString["IDThuoc_Arr"]);
                string TenThuoc_Arr = Factory.emptyNull(context.Request.QueryString["TenThuoc_Arr"]);
                string SoLuong_Arr = Factory.emptyNull(context.Request.QueryString["SoLuong_Arr"]);
                string DonVi_Arr = Factory.emptyNull(context.Request.QueryString["DonVi_Arr"]);
                string CachDung_Arr = Factory.emptyNull(context.Request.QueryString["CachDung_Arr"]);
                string LanDung_Arr = Factory.emptyNull(context.Request.QueryString["LanDung_Arr"]);
                string LuongDung_Arr = Factory.emptyNull(context.Request.QueryString["LuongDung_Arr"]);
                string DonViDung_Arr = Factory.emptyNull(context.Request.QueryString["DonViDung_Arr"]);
                string GhiChu_Arr = Factory.emptyNull(context.Request.QueryString["GhiChu_Arr"]);
                string Gia_Arr = Factory.emptyNull(context.Request.QueryString["Gia_Arr"]);
                string DBName_Arr = Factory.emptyNull(context.Request.QueryString["DBName_Arr"]);
                if (IDThuoc_Arr != "")
                {
                    string[] IDThuocs = IDThuoc_Arr.TrimEnd('~').Split('~');
                    string[] TenThuocs = TenThuoc_Arr.TrimEnd('~').Split('~');
                    string[] SoLuongs = SoLuong_Arr.TrimEnd('~').Split('~');
                    string[] DonVis = DonVi_Arr.TrimEnd('~').Split('~');
                    string[] CachDungs = CachDung_Arr.TrimEnd('~').Split('~');
                    string[] LanDungs = LanDung_Arr.TrimEnd('~').Split('~');
                    string[] LuongDungs = LuongDung_Arr.TrimEnd('~').Split('~');
                    string[] DonViDungs = DonViDung_Arr.TrimEnd('~').Split('~');
                    string[] GhiChus = GhiChu_Arr.TrimEnd('~').Split('~');
                    string[] Gias = Gia_Arr.TrimEnd('~').Split('~');
                    string[] DBNames = DBName_Arr.TrimEnd('~').Split('~');
                    int nRowHasValue = 0;
                    string ThuocID = "";
                    for (int k = 0; k < IDThuocs.Length; k++)
                    {
                        try
                        {
                            ThuocID = IDThuocs[k].Trim();
                            if (ThuocID != "" && ThuocID != null)
                            {
                                nRowHasValue += 1;
                                //oToaThuoc.TenThuoc = tenthuoc;                       
                                try
                                {
                                    ThuocID = ThuocID.Replace("\'", "\'\'");
                                    oToaThuoc.ThuocID = Convert.ToInt32(ThuocID);
                                }
                                catch { }
                                string tenthuoc = "";
                                try
                                {
                                    tenthuoc = TenThuocs[k].Trim();
                                }
                                catch { }
                                tenthuoc = tenthuoc.Replace("\'", "\'\'");
                                string dbname = DBNames[k].Trim();
                                try
                                {
                                    dbname = dbname.Replace("\'", "\'\'");
                                    oToaThuoc.DBname = dbname;
                                }
                                catch { }

                                string soluong = SoLuongs[k].Trim();
                                try
                                {
                                    soluong = soluong.Replace("\'", "\'\'");
                                    if (soluong == "")
                                        soluong = "0";
                                    oToaThuoc.SoLuong = Convert.ToInt32(soluong);
                                }
                                catch { }
                                string donvi = DonVis[k].Trim();
                                try
                                {
                                    donvi = donvi.Replace("\'", "\'\'");
                                    if (donvi == "")
                                        donvi = "~";
                                    oToaThuoc.DonVi = donvi;
                                }
                                catch { }
                                string cachdung = CachDungs[k].Trim();
                                try
                                {
                                    cachdung = cachdung.Replace("\'", "\'\'");
                                    if (cachdung == "")
                                        cachdung = "~";
                                    oToaThuoc.CachDung = cachdung;
                                }
                                catch { }
                                string lan = LanDungs[k].Trim();
                                try
                                {
                                    lan = lan.Replace("\'", "\'\'");
                                    if (lan == "")
                                        lan = "0";
                                    oToaThuoc.LanDung = lan;
                                }
                                catch { }
                                string sl = LuongDungs[k].Trim();
                                try
                                {
                                    sl = sl.Replace("\'", "\'\'");
                                    if (sl == "")
                                        sl = "0";
                                    oToaThuoc.LuongDung = sl;
                                }
                                catch { }
                                string dv = DonViDungs[k].Trim();
                                try
                                {
                                    dv = dv.Replace("\'", "\'\'");
                                    if (dv == "")
                                        dv = "~";
                                    oToaThuoc.DonViDung = dv;
                                }
                                catch { }
                                string ghichu = GhiChus[k].Trim();
                                try
                                {
                                    ghichu = ghichu.Replace("\'", "\'\'");
                                    if (ghichu == "" || ghichu == "spaceYKN")
                                        ghichu = "~";
                                    oToaThuoc.GhiChu = ghichu;
                                }
                                catch { }
                                //									string dongia=Request.Form.Get("dongia"+j.ToString());
                                //									if(dongia.Trim()=="") dongia="0";
                                //									try
                                //									{
                                //										dongia=dongia.Replace("\'","\'\'");
                                //										
                                //										System.Globalization.NumberFormatInfo numInfo = new System.Globalization.NumberFormatInfo();
                                //										numInfo.NumberDecimalSeparator=".";
                                //										numInfo.NumberDecimalDigits=4;
                                //										double dd =  Convert.ToDouble(dongia,numInfo);
                                //										oToaThuoc.DonGia = dd;
                                //									}
                                //									catch{}
                                dal_PhieuKham.CapNhatTuDienBacSi(context.Session["mand"].ToString().Trim(), tenthuoc, soluong, donvi, cachdung, lan, sl, dv, ghichu, ThuocID);
                            }//  END if (tenthuoc!=""&&tenthuoc!=null)
                        }

                        catch
                        {

                        }
                    }

                    if (nRowHasValue != 0)
                    {
                        oToaThuoc.LoaiKham = SPK.LoaiKham_CP;
                        oToaThuoc.DBName_Static = "KhoBH";
                        oToaThuoc.MaPhieuKham_Cu = SPK.MaPhieuCu;
                        oToaThuoc.CheckThuocBaoHiem = Convert.ToBoolean(isThuocBaoHiem);
                        string msg = oToaThuoc.addNewToaThuoc();
                        if (oToaThuoc.ErrorCode != -1)
                        {
                            SPK.deleteSo_PhieuKham(SPK.MaPK);
                            SPK.fnCapNhatKeToaDSChoKham(SPK.MaDotKham, SPK.MaKhoa);
                            message = "<br>" + msg;
                        }
                        else
                        {
                            message = "Đã lưu phiếu khám";
                        }
                    }
                    xmlReturn = message;
                }
                return xmlReturn;
            }
            catch (Exception e)
            {
                SPK.deleteSo_PhieuKham(SPK.MaPK);
                SPK.fnCapNhatKeToaDSChoKham(SPK.MaDotKham, SPK.MaKhoa);
                return e.Message;
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

    }
}